package com.ruoyi.system.service;

import java.util.Date;
import java.util.List;
import com.ruoyi.system.domain.Employee;
import org.apache.ibatis.annotations.Param;

/**
 * 员工管理Service接口
 * 
 * @author ruoyi
 * @date 2023-04-11
 */
public interface IEmployeeService 
{
    /**
     * 查询员工管理
     * 
     * @param employeeId 员工管理主键
     * @return 员工管理
     */
    public Employee selectEmployeeByEmployeeId(Long employeeId);

    /**
     * 查询员工管理列表
     * 
     * @param employee 员工管理
     * @return 员工管理集合
     */
    public List<Employee> selectEmployeeList(Employee employee);

    /**
     * 新增员工管理
     * 
     * @param employee 员工管理
     * @return 结果
     */
    public int insertEmployee(Employee employee);

    /**
     * 修改员工管理
     * 
     * @param employee 员工管理
     * @return 结果
     */
    public int updateEmployee(Employee employee);

    /**
     * 批量删除员工管理
     * 
     * @param employeeIds 需要删除的员工管理主键集合
     * @return 结果
     */
    public int deleteEmployeeByEmployeeIds(String employeeIds);

    /**
     * 删除员工管理信息
     * 
     * @param employeeId 员工管理主键
     * @return 结果
     */
    public int deleteEmployeeByEmployeeId(Long employeeId);

    /**
     * 调动部门
     * @param employeeId 员工编号
     * @param dept 调入部门
     * @return 结果
     */
    public int transferDeptByEmployeeId(long employeeId,String dept);

    /**
     * 岗位调动
     * @param employeeId 员工编号
     * @param post 调入岗位
     * @return 结果
     */
    public int transferPostByEmployeeId(long employeeId,String post);

    /**
     * 员工转正
     * @param employeeId 员工编号
     * @return 结果
     */
    public int TraineeToEmployee(long employeeId);

    /**
     * 上传档案
     * @param employeeId 员工编号
     */
    public void updateFilesByEmployeeId(long employeeId, String employeeFiles);

    /**
     * 统计部门人数
     * @param dept 部门
     * @return 结果
     */
    public Integer countEmployeeByDept(String dept);

    /**
     * 统计岗位人数
     * @param post 岗位
     * @return 结果
     */
    public Integer countEmployeeByPost(String post);

    /**
     * 部门平均工资
     * @param dept 部门
     * @return 结果
     */
    public Double avgSalaryByDept(String dept);

    /**
     * 部门岗位工资
     * @param post 岗位
     * @return 结果
     */
    public Double avgSalaryByPost(String post);

    /**
     * 部门全勤人数
     * @param dept 部门
     * @return 结果
     */
    public Double countAttendanceByDept(String dept);

    /**
     * 岗位全勤人数
     * @param post 岗位
     * @return 结果
     */
    public Double countAttendanceByPost(String post);

    /**
     * 部门平均迟到数
     * @param dept 部门
     * @return 结果
     */
    public Double countLateByDept(String dept);

    /**
     * 岗位平均迟到数
     * @param post 岗位
     * @return 结果
     */
    public Double countLateByPost(String post);

    public int checkSign(Long employeeId);

    public void checkLeave();

    public void checkAttendance();

    public void resetSign();

    public int setLeaveBackTime(@Param("employeeId")Long employeeId,
                                 @Param("leaveTime")Date leaveTime, @Param("backTime")Date backTime);
}
